import axios,{ AxiosError } from "axios";
import { ElMessage } from 'element-plus'
import NProgress from "nprogress";
import store from "@/store";

const ERROR_MSG = {
    ECONNABORTED: "请求超时,请稍后重试",
    ETIMEDOUT: "网络异常,请检查网络连接",
    ERR_NETWORK: "网络异常,请检查网络连接",
    DEFAULT: "请求失败,未发送"
}
const HTTP_MSG = {
    404: "您所访问的资源不存在",
    500: "服务器异常,请联系管理员",
    DEFAULT: "服务器忙,请稍后重试"
}

let request = axios.create({
    baseURL: process.env.VUE_APP_REQUEST_URL
})

request.interceptors.request.use(
    // 请求执行前 成功时拦截器回调方法
    function (config) {
        NProgress.start()
        config.headers.Authorization = store.state.token
        // console.log("工具请求拦截器")
        return config;
    },
    // 请求执行前 失败时拦截器回调方法
    function (error) {
        NProgress.done()
        return Promise.reject(error);
    }
)

request.interceptors.response.use(
    // 请求执行后 响应成功时拦截器回调方法
    function (response) {
        NProgress.done()

        // 请求成功后的业务数据处理
        let { data,meta } = response.data;
        if(meta.status<400){
            return data;
        }else{
            ElMessage.error(meta.msg);
            return null;
        }
    },
    // 请求执行后 响应失败时拦截器回调方法
    function (error) {
        NProgress.done()
        let msg = ""
        if (!(error instanceof AxiosError)) {
            msg = "程序运行错误请联系管理员"
        } else if (error.response) {
            msg = HTTP_MSG[error.response.status] || HTTP_MSG.DEFAULT;
        } else {
            msg = ERROR_MSG[error.code] || ERROR_MSG.DEFAULT;
        }
        ElMessage.error(msg)
        return Promise.reject(error);
    }
)


export default request;